

package com.mt.restaurant.controller.material;

import org.springframework.security.access.prepost.PreAuthorize;
import com.mt.common.core.annotation.ApiPageParam;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import com.mt.common.core.web.base.PageDTO;
import com.mt.common.core.web.base.PageResultDTO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import com.mt.restaurant.dto.material.CostEditDto;
import com.mt.restaurant.entity.material.Cost;
import com.mt.restaurant.service.material.CostService;


@Api(tags = "成本管理")
@RestController
@RequestMapping("/api/restaurant/material/Cost")
@CrossOrigin(allowCredentials = "true")
public class CostController {
    private static Logger logger = LoggerFactory.getLogger(CostController.class);


    @Autowired
    private CostService costService;

    /**
     * 根据分页参数查询成本管理集合
     *
     * @param pageDTO 分页条件
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("分页查询成本管理")
    @ApiPageParam
    @PostMapping("/findCosts")
    public PageResultDTO findCosts(@RequestBody PageDTO pageDTO) {
        return this.costService.findCosts(pageDTO);
    }

    /**
     * 根据分页参数查询成本管理集合
     *
     * @param pageDTO 分页条件
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("分页查询成本管理")
    @ApiPageParam
    @PostMapping("/findCostsAndCountTotal")
    public Map<String,Object> findCostsAndCountTotal(@RequestBody PageDTO pageDTO) {
        return this.costService.findCostsAndCountTotal(pageDTO);
    }

    /**
     * 根据ID查询指定的成本管理
     *
     * @param costId Id
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据id查询成本管理")
    @ApiPageParam
    @PostMapping("/findCost")
    public Cost findCost(@RequestParam Long costId) {
        return this.costService.findCost(costId);
    }

    /**
     * 根据ID查询指定的成本管理(包含外键名称)
     *
     * @param costId Id
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据ID查询指定的成本管理(包含外键名称)")
    @PostMapping("/findCostForView")
    public Cost findCostForView(@RequestParam Long costId) {
        return this.costService.findCostWithForeignName(costId);
    }

    /**
     * 根据ID查询指定的成本管理(包含成本管理和外键名称)
     *
     * @param costId Id
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据ID查询指定的成本管理(包含成本管理和外键名称)")
    @PostMapping("/findCostForEdit")
    public CostEditDto findCostForEdit(@RequestParam Long costId) {
        CostEditDto costEditDto = new CostEditDto();
        costEditDto.setCost(this.costService.findCostWithForeignName(costId));

        this.prepareCostEditDto(costEditDto);

        return costEditDto;
    }

    /**
     * 根据ID查询指定的成本管理(只提取ID 和 Name)
     *
     * @param costId Id
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据ID查询指定的成本管理(只提取ID 和 Name)")
    @PostMapping("/findCostsWithIdNameById")
    public Cost findCostsWithIdNameById(@RequestParam Long costId) {
        return this.costService.findCostsWithIdNameById(costId);
    }

    /**
     * 根据名称查询成本管理集合(只提取ID 和 Name)
     *
     * @param costName 名称
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据名称查询成本管理集合(只提取ID 和 Name)")
    @PostMapping("/findCostsWithIdNameByName")
    public List<Cost> findCostsWithIdNameByName(@RequestParam String costName) {
        return this.costService.findCostsWithIdNameByName(costName);
    }

    /**
     * 根据名称查询成本管理集合(只提取ID 和 Name)
     *
     * @param costName 名称
     */
    /*@PreAuthorize("hasAuthority('restaurant:material:Cost:view')")
    @ApiOperation("根据名称查询成本管理集合(只提取ID 和 Name)")
    @PostMapping("/get")
    public List<Cost> findCostsWithIdNameByName(@RequestParam String costName) {
        return this.costService.findCostsWithIdNameByName(costName);
    }*/


    /**
     * 创建新的成本管理
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:add')")
    @ApiOperation("创建新的成本管理")
    @PostMapping("/createCost")
    public CostEditDto createCost() {
        CostEditDto costEditDto = new CostEditDto();
        costEditDto.setCost(new Cost());

        this.prepareCostEditDto(costEditDto);
        return costEditDto;
    }

    private void prepareCostEditDto(CostEditDto costEditDto) {
    }

    /**
     * 新增保存成本管理
     *
     * @param cost 实体对象
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:add')")
    @ApiOperation("新增保存成本管理")
    @PostMapping("/saveCost")
    public Cost saveCost(@RequestBody Cost cost) {
        return this.costService.saveCost(cost);
    }

    /**
     * 修改保存成本管理
     *
     * @param cost 实体对象
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:update')")
    @ApiOperation("修改保存成本管理")
    @PostMapping("/updateCost")
    public Cost updateCost(@RequestBody Cost cost) {
        return this.costService.updateCost(cost);
    }

    /**
     * 根据ID删除成本管理
     *
     * @param costId ID
     */
    @PreAuthorize("hasAuthority('restaurant:material:Cost:remove')")
    @ApiOperation("根据ID删除成本管理")
    @PostMapping("/deleteCost")
    public void deleteCost(@RequestParam Long costId) {
        this.costService.deleteCost(costId);
    }


}

